package org.jcut.controller;

import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import org.jcut.bean.Commodity;
import org.jcut.bean.Details;

import org.jcut.bean.TImg;
import org.jcut.data.Data;
import org.jcut.service.ICommodityService;
import org.jcut.service.impl.DetailsServiceImpl;
import org.jcut.service.impl.TimgServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@PropertySource(value = "application.properties")
@RestController
@RequestMapping("/commodity")
public class CommodityController {
	@Value("${imgpath}")
	private String path;
	@Autowired
	private Data data;
	@Autowired
	private ICommodityService service;
	@Autowired
	private DetailsServiceImpl detail;
	@Autowired
	private TimgServiceImpl timg;
	/**
	 * @author 胡琪
	 * @param typeName 商品类型名称
	 * */
	@RequestMapping(value = "/select", method = RequestMethod.GET,params = {"typeName"})
	public Data selectCommodity(@RequestParam("typeName") String typeName) {
		List<Commodity> commodity1 = service.selectTypeCommodity(typeName);
		data.setMsg("查询成功！");
		data.setStatus("1");
		data.setData(commodity1);
		return data;
	}

	/**
	 * @author 胡琪
	 * @param id    商品id
	 * @param sales 购买数量 购买商品
	 */
	@RequestMapping(value="/buyCommodity",params = {"id","sales"})
	public Data buyCommodity(Commodity commodity) {
		int i = service.buyCommodity(commodity);
		data.setData(i);
		if (i > 0) {
			data.setMsg("1");
			data.setMsg("购买成功！");
		} else {
			data.setMsg("购买失败！");
			data.setStatus("0");
		}

		return data;
	}

	/**
	 * @author 胡琪
	 * @param stock 退货数量
	 * @param id    商品id
	 */
	@RequestMapping(value="/returnCommodity",params = {"stock","id"})
	public Data returnCommodity(Commodity commodity) {
		int i = service.returnCommodity(commodity);
		data.setData(i);
		if (i > 0) {
			data.setStatus("1");
			data.setMsg("退货成功！");
		} else {
			data.setMsg("退货失败！");
			data.setStatus("0");
		}

		return data;

	}

	/**
	 * @author 胡琪
	 * @param id              商品id
	 * @param name            商品名称(非必填)
	 * @param price           商品最高价格范围(非必填)
	 * @param activity_prices 商品最低价格范围(非必填)
	 * @param specs           商品包装方式(非必填)
	 * @param brand           商品品牌(非必填)
	 * @param activity        商品活动类型(非必填)
	 * @param t_id            商品类型id
	 */
	@RequestMapping("/chooseCommodity")
	public Data chooseCommodity(Commodity commodity) {
		List<Commodity> list = service.chooseCommodity(commodity);
		data.setData(list);
		data.setMsg("查询成功");
		data.setStatus("1");
		return data;

	}
	/**
	 * @author 胡琪
	 * @param name 商品名
	 * @param myImg  @type file(必填)
	 * @param brand  品牌(必填)
	 * @param activity 活动编号(必填)
	 * @param price  商品价格(必填，并且大于0)
	 * @param end_time 如果有活动填入活动结束时间
	 * @param activity_prices 如果有活动填入活动价格
	 * @param stock   商品库存(必填，并且大于0)
	 * @param specs   包装的id(必填)
	 * @param weight  商品重量(必填)
	 * @param t_id    商品类型id(必填)
	 * */
	@RequestMapping(value="/addCommodity")
	  public Data addCommodity(Commodity commodity,@RequestParam(value="myImg",required = true)MultipartFile[] file1) {
		  //添加展示图片
		  String t_img=UUID.randomUUID().toString();//商品展示图片id
		  boolean flag=false;
		  for(MultipartFile ff:file1) {
			  String tImgId=UUID.randomUUID().toString();
			  timg.insert(new TImg(tImgId, t_img, "imgs/"+tImgId+".jpg"));
			  try {
				ff.transferTo(new File(path+tImgId+".jpg"));
				flag=true;
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
		  }
		  commodity.setT_img(t_img);
		  if(commodity.getActivity()!=null&&commodity.getStock()!=null&&commodity.getStock()>0&&commodity.getPrice()!=null&&commodity.getPrice()>0&&commodity.getT_id()!=null&&!("".equals(commodity.getT_id()))&&commodity.getSpecs()!=null&&!("".equals(commodity.getSpecs()))&&flag&&commodity.getBrand()!=null&&!("".equals(commodity.getBrand()))) {
			  commodity.setId(UUID.randomUUID().toString());
			  
			  commodity.setStart_time(new Date());

			  
			  int i= service.addCommodity(commodity);//插入点
			 
			 if(i>0) {
				 data.setData(i);
				 data.setMsg("添加成功!");
				 data.setStatus("1");
			 }else {
				 data.setData(i);
				 data.setMsg("服务器异常!");
				 data.setStatus("0");
			 }
		  }else {
			  data.setData("0");
				 data.setMsg("必填项不能为空!");
				 data.setStatus("0");
			  
		  }
		  return data;
	  }
	/**
	 * @author 胡琪
	 * @param String id 商品id
	 * @param detail @type detail 图片
	 * 
	 * */
	@RequestMapping("/updateDetail")
	public Object updateDetail(Commodity commodity,@RequestParam(value="detail[]",required = true)MultipartFile[] file) {
		
		commodity.setDetails(commodity.getId());
		  int i=service.updateDetail(commodity);
		 
		  if(i>0) {
			  for (MultipartFile f:file) {
					try {
						
						//图片名（并且用来作为详情主键）
						String img=UUID.randomUUID().toString();
						detail.insert(new Details(img, commodity.getId(), "imgs/"+img+".jpg"));
						f.transferTo(new File(path+img+".jpg"));
						data.setData("1");
					    data.setStatus("1");
						data.setMsg("添加完成");
					} catch (Exception e) {
						data.setData("0");
						data.setStatus("0");
						data.setMsg("服务器异常");
						// TODO Auto-generated catch block
						e.printStackTrace();
					} 
				}  
		  }else {
			  data.setData("0");
			  data.setStatus("0");
			  data.setMsg("服务器异常");
		  }
		
		return data;
	}
	@RequestMapping("/adminSelect")
	public Object adminSelect(String uId,@RequestParam(value="pageNum",required = false)String pageNum,@RequestParam(value="pageSize",required = false) String pageSize) {
		System.out.println("集合大小"+service.adminSelect().size());
		if ((pageNum != null && !("".equals(pageNum))) && (pageSize != null && !("".equals(pageSize)))) {
			PageHelper.startPage(Integer.parseInt(pageNum), Integer.parseInt(pageSize));
		}
		PageInfo<Commodity> pageInfo = new PageInfo<>(service.adminSelect());
		data.setData(pageInfo);
		data.setStatus("1");
		data.setMsg(String.valueOf(service.adminSelect().size()));
		return data;
	}
	@RequestMapping("/updateDis")
	public Object updateDis(Commodity commodity) {
		int i=service.updateDis(commodity);
		if(i>0) {
			data.setData("1");
			data.setMsg("修改成功");
			data.setStatus("1");
		}else {
			data.setData("0");
			data.setMsg("修改失败");
			data.setStatus("0");
		}
		return data;
	}
	/**
	 * @author 胡琪
	 * @param name 商品名
	 * @param myImg  @type file(必填)
	 * @param brand  品牌(必填)
	 * @param activity 活动编号(必填)
	 * @param price  商品价格(必填，并且大于0)
	 * @param end_time 如果有活动填入活动结束时间
	 * @param activity_prices 如果有活动填入活动价格
	 * @param stock   商品库存(必填，并且大于0)
	 * @param specs   包装的id(必填)
	 * @param weight  商品重量(必填)
	 * @param t_id    商品类型id(必填)
	 * */
	@RequestMapping("/updateCommodity")
	public Object updateCommodity(Commodity commodity,@RequestParam(value="myImg",required = true)MultipartFile[] file1) {
		 //添加展示图片
		  String t_img=UUID.randomUUID().toString();//商品展示图片id
		  boolean flag=false;
		  for(MultipartFile ff:file1) {
			  String tImgId=UUID.randomUUID().toString();
			  timg.insert(new TImg(tImgId, t_img, "imgs/"+tImgId+".jpg"));
			  try {
				ff.transferTo(new File(path+tImgId+".jpg"));
				flag=true;
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
		  }
		  commodity.setT_img(t_img);
		  if(commodity.getActivity()!=null&&commodity.getStock()!=null&&commodity.getStock()>0&&commodity.getPrice()!=null&&commodity.getPrice()>0&&commodity.getT_id()!=null&&!("".equals(commodity.getT_id()))&&commodity.getSpecs()!=null&&!("".equals(commodity.getSpecs()))&&flag&&commodity.getBrand()!=null&&!("".equals(commodity.getBrand()))) {

			  int i= service.updateCommodity(commodity);//插入点
			 
			 if(i>0) {
				 data.setData(i);
				 data.setMsg("添加成功!");
				 data.setStatus("1");
			 }else {
				 data.setData(i);
				 data.setMsg("服务器异常!");
				 data.setStatus("0");
			 }
		  }else {
			  data.setData("0");
				 data.setMsg("必填项不能为空!");
				 data.setStatus("0");
			  
		  }
		  return data;
	}
}
